草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - 需要按插入顺序设置 STL

如何按插入顺序将元素存储在集合中。例如。setmyset;myset.insert("stack");myset.insert("overflow");如果你打印,输出是overflowstack需要的输出:stackoverflow 最佳答案 一种方法是使用两个容器,一个std::deque以插入顺序存储元素,另一个std::set确保没有重复。插入元素时,先检查是否在set中,如果是则丢弃;如果不存在,请将其同时插入deque和set。一个常见的场景是先插入所有元素,然后处理(不再插入),如果是这种情况,set可以在插入处理后释

c++ - typedef 复杂 STL 映射时的命名约定是什么?

1)typedef'ing时实际使用的约定是什么类似typedefstd::map[SomeStandardName>]typedefstd::map>2)你通常把typedef:全局头文件放在类的地方吗?3)你是typedef迭代器还是constmap版本?4)假设您有两个不同概念使用的映射,您是否为它们创建了两个单独的typedef?typedefmapIDToSomeClassMap;typedefmapDescriptionToSomeClassMap;谢谢编辑#1我对typedefSTL映射特别感兴趣,例如typedefmapIdToDescriptionMap或typede

c++ - 进程 fork 后 RAII 对象会发生什么?

在Unix/Linux下,我的事件RAII对象在fork时会发生什么?会不会出现双删?复制构造和赋值是什么?如何确保没有坏事发生? 最佳答案 fork(2)创建进程的完整拷贝,包括其所有内存。是的,自动对象的析构函数将运行两次-在父进程和子进程中,在单独的虚拟内存空间中。没有什么“坏事”发生(当然,除非您在析构函数中从帐户中扣除了钱),您只需要了解这一事实。 关于c++-进程fork后RAII对象会发生什么?,我们在StackOverflow上找到一个类似的问题:

C++ STL数据结构对齐,算法向量化

有没有办法强制STL容器对齐到特定字节,也许使用attribute((aligned))?目标编译器不是MicrosoftVisualC++。哪些库(如果有)提供具有特定显式矢量化的STL算法的专用模板,例如上证所。我感兴趣的编译器是g++、Intel和IBMXL。 最佳答案 使用STL容器,您可以通过可选的模板参数提供自己的分配器。我不建议从头开始编写整个分配器,但您可以编写一个只是new和delete的包装器,但要确保返回的内存满足您的对齐要求。(例如,如果您需要n字节对齐16字节,则使用new分配n+15字节并返回指向该blo

c++ - 在 gdb 中显示取消引用的 STL 迭代器

我有一个映射元素的迭代器,我希望gdb向我显示该迭代器的“第一个”和“第二个”元素的值。例如:std::mapaMap;...fillmap...std::map::const_iteratorp=aMap.begin();我可以在代码中使用p.first和p.second,但在gdb中看不到它们。对于它的值(value),在dbx中可以执行“printp.node.second_”之类的操作,但我可以在gbd中找到类似的内容。我完全愿意有一个函数来传递对象类型,但我也无法让它工作。有什么想法吗?谢谢! 最佳答案 这是我的做法:Th

c++ - 引用计数指针的 STL 类?

这应该是微不足道的,但我似乎找不到它(除非不存在这样的类!)智能指针的STL类(或类集)是什么?更新感谢您的回复,我必须说我很惊讶没有标准的实现。我最终使用了这个:http://archive.gamedev.net/reference/articles/article1060.asp 最佳答案 除了已经提到的TR1shared_ptr之外,STL中没有引用计数指针。我建议你使用boost::shared_ptr(下载boost就足够了,没有什么要编译的,它的实现是header-only)。您可能还想看看Loki库中的智能指针(同样

c++ - 原始 STL 与最终出现在 C++ 标准库中的那些部分之间的具体区别是什么?

我想知道SGI发布的STL之间的具体区别是什么和ISOC++标准库。由thisquestion提示thisquestion根本没有回答.一些差异是显而易见的,例如从未将其纳入标准的slist和hash_set类。我也在寻找更细微的差异,例如方法的返回值/参数差异,或不同的复杂性要求,或不同的迭代器失效条件。 最佳答案 C++标准中“缺失”的SGISTL内容包括slistbit_vectorhash_set、hash_map、hash_multiset、hash_multimap以及与哈希函数相关的所有内容ropeiotalexico

c++ - 如何将数组存储在 STL 列表中?

使用C++和STL,有人知道如何将整数数组作为节点存储在STL列表或vector中吗?我需要存储未知数量的数字对,并且来自其他语言,我的第一个想法是使用某种类似列表或vector的数据结构......但我遇到了一些麻烦。我100%确定我犯了一个明显的初学者C++错误,并且真正了解该语言的人会看一看我正在尝试做的事情并能够纠正我。所以,这就是我尝试过的。像这样声明一个列表是可行的:stl::listmy_list;然后我可以轻松地制作一个二元素数组,如下所示:intfoo[2]={1,2};这编译并运行得很好。但是,一旦我尝试将foo添加到我的列表中,就像这样:my_list.push_

STL - STL count_if 的标准谓词

我正在使用STL函数count_if来计算所有正值在doublevector中。例如我的代码是这样的:vectorArray(1,1.0)Array.push_back(-1.0);Array.push_back(1.0);cout其中函数isPositive定义为boolisPositive(doublex){return(x>0);}以下代码将返回2。有没有办法做到以上几点不写我自己的函数isPositive?有没有内置的我可以使用的功能?谢谢! 最佳答案 std::count_if(v.begin(),v.end(),std:

c++ - 关于使用用户定义方法扩展 C++ STL 容器的更好方法的建议

我继承自C++STL容器并向其添加我自己的方法。其基本原理是,对于客户来说,它看起来像是一个常规列表,但具有可以很容易地调用的特定于应用程序的方法。这很好用,但我读过很多关于不从STL继承的帖子。有人可以就我如何以更好的方式编写下面的代码提供具体建议吗?classItem{inta;intb;intc;intSpecialB(){returna*b+c;}};classItemList:publicstd::vector{intMaxA(){if(this->empty())throw;intmaxA=(*this)[0].a;for(intidx=1;idxsize();idx++)